package core

import "fmt"

type Error struct {
	Code  int         `json:"error"`
	Msg   string      `json:"message"`
	Data  []interface{} `json:"data"`
	Trace []string    `json:"trace"`
}

// NewError 新建一个错误
func NewError(code int, message string, data ...interface{}) *Error {
	return &Error{
		Code: code,
		Msg:  message,
		Data: data,
	}
}

func (e Error) String() string {
	res := fmt.Sprintf("Code: %d, Message: %s", e.Code, e.Msg)
	for i, t := range e.Trace {
		res += fmt.Sprintf("\n%d).Trace: %s", i, t)
	}
	return res
}

// FormatMessage 格式化信息
func (e Error) FormatMessage(messages ...interface{}) Error {
	e.Msg = fmt.Sprintf(e.Msg, messages...)
	return e
}

// Log 错误的日志记录
func (e Error) Log() Error {

	return e
}
